
[dbo].[asi_Get_TransactionID]
CREATE FUNCTION [dbo].[asi_Get_TransactionID](@Id varchar(10),
@TransReq varchar(10) )
RETURNS int AS
BEGIN
DECLARE @TransId int
DECLARE @FirstTransId int
DECLARE @FirstTransDate datetime
DECLARE @LastTransId int
DECLARE @LastTransDate datetime
DECLARE @NextLastTransId int
DECLARE @NextLastTransDate datetime
SET @TransId= 0
SET @LastTransId = 0
SET @NextLastTransId = 0
SET @FirstTransId = 0
DECLARE @Gifts TABLE
(
[OriginalTransaction] int,
[Amount] money,
[MinTransDate] datetime,
[MaxTransDate] datetime,
[TransDate] datetime
)
INSERT INTO @Gifts( [OriginalTransaction], [Amount],
[MinTransDate], [MaxTransDate] )
SELECT [OriginalTransaction], SUM([Amount]),
MIN( [TransactionDate] ),
MAX( [TransactionDate] )
FROM [vGift] GH1 WITH(NOLOCK)
WHERE [ID] = @Id
GROUP BY [OriginalTransaction]
DELETE FROM @Gifts WHERE [Amount] = 0
SELECT TOP 1 @FirstTransId = [OriginalTransaction],
@FirstTransDate = [MinTransDate]
FROM @Gifts
ORDER BY [MinTransDate], [OriginalTransaction]
SELECT TOP 1 @LastTransId = ISNULL([OriginalTransaction] ,0),
@LastTransDate = [MaxTransDate]
FROM @Gifts
WHERE [OriginalTransaction] <> @FirstTransId
AND [MaxTransDate] >= @FirstTransDate
ORDER BY [MaxTransDate] DESC, [OriginalTransaction] DESC
SELECT TOP 1 @NextLastTransId = ISNULL([OriginalTransaction] ,0)
FROM @Gifts
WHERE [OriginalTransaction] <> @FirstTransId
AND [OriginalTransaction] <> @LastTransId
AND [MaxTransDate] >= @FirstTransDate
AND [MaxTransDate] <= @LastTransDate
ORDER BY [MaxTransDate] DESC, [OriginalTransaction] DESC
IF (@TransReq = 'LAST')
BEGIN
SET @TransId = @LastTransId
END
IF @TransReq = 'FIRST'
BEGIN
SET @TransId = @FirstTransId
END
IF (@TransReq = 'NEXTLAST')
BEGIN
SET @TransId = @NextLastTransId
END
RETURN @TransId
END
GO